#!/bin/bash

# 像素生存者游戏构建脚本
# 将所有模块合并成单个game.js文件，并解决缓存问题

echo "🚀 开始构建像素生存者游戏..."

# 创建构建目录
mkdir -p build

# 清理旧的构建文件
echo "🧹 清理旧的构建文件..."
if [ -d "build" ]; then
    # 清理旧的JS文件（保留最新的3个版本）
    cd build
    ls -t game_*.js 2>/dev/null | tail -n +4 | xargs -r rm -f
    # 清理可能的临时文件
    rm -f *.tmp *.temp game_temp.js 2>/dev/null
    cd ..
    echo "  ✅ 清理完成"
else
    echo "  ℹ️  首次构建，无需清理"
fi

# 生成版本号（基于时间戳）
VERSION=$(date +"%Y%m%d_%H%M%S")
BUILD_HASH=$(echo -n "$(date)" | md5sum | cut -d' ' -f1 | head -c 8)

echo "📦 构建版本: $VERSION"
echo "🔑 构建哈希: $BUILD_HASH"

# 输出文件（带版本号）
output_file="build/game_${BUILD_HASH}.js"
latest_file="build/game.js"

# 清空输出文件
> "$output_file"

echo "📦 合并JavaScript文件..."

# 文件合并顺序很重要 - 依赖关系
files=(
    "src/core/GameConfig.js"
    "src/core/SpriteCreator.js"
    "src/utils/EffectSystem.js"
    "src/utils/TouchController.js"
    "src/systems/WeaponSystem.js"
    "src/systems/EnemySystem.js"
    "src/systems/UpgradeSystem.js"
    "src/systems/AchievementSystem.js"
    "src/systems/ShopSystem.js"
    "src/ui/UISystem.js"
    "src/ui/MenuScenes.js"
    "src/core/PixelSurvivor.js"
)

# 添加文件头注释
echo "// 像素生存者游戏 - 构建版本" >> "$output_file"
echo "// 构建时间: $(date)" >> "$output_file"
echo "// 构建版本: $VERSION" >> "$output_file"
echo "// 构建哈希: $BUILD_HASH" >> "$output_file"
echo "// ========================================" >> "$output_file"
echo "" >> "$output_file"

# 合并所有文件
for file in "${files[@]}"; do
    if [ -f "$file" ]; then
        echo "  ✅ 合并: $file"
        echo "// === $file ===" >> "$output_file"
        cat "$file" >> "$output_file"
        echo "" >> "$output_file"
        echo "" >> "$output_file"
    else
        echo "  ❌ 文件不存在: $file"
        exit 1
    fi
done

# 添加游戏启动代码
echo "// === 游戏启动 ===" >> "$output_file"
echo "// 启动游戏" >> "$output_file"
echo "const game = new Phaser.Game(GameConfig.config);" >> "$output_file"

# 创建最新版本的符号链接
echo "🔗 创建最新版本链接..."
cp "$output_file" "$latest_file"

echo "📋 复制其他必要文件..."

# 复制菜单文件（如果需要的话）
if [ -f "js/menu.js" ]; then
    echo "  ✅ 复制 menu.js"
    cp "js/menu.js" "build/"
else
    echo "  ⚠️  menu.js 不存在，需要手动创建"
fi

# 使用构建模板创建HTML文件（添加缓存破坏）
if [ -f "build_template.html" ]; then
    echo "  ✅ 使用构建模板创建 index.html（添加缓存破坏）"
    # 替换模板中的占位符
    sed "s|BUILD_VERSION|$VERSION|g" build_template.html > build/index.html
    sed -i "s|BUILD_HASH|$BUILD_HASH|g" build/index.html
    # 添加meta标签防止缓存
    sed -i '/<head>/a\    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">\n    <meta http-equiv="Pragma" content="no-cache">\n    <meta http-equiv="Expires" content="0">' build/index.html
elif [ -f "index.html" ]; then
    echo "  ⚠️  使用原始 index.html（不推荐用于生产环境）"
    cp index.html build/index.html
else
    echo "  ❌ 没有找到HTML模板文件"
fi

# 复制Phaser库
if [ -f "phaser.min.js" ]; then
    echo "  ✅ 复制 phaser.min.js"
    cp "phaser.min.js" "build/"
else
    echo "  ❌ phaser.min.js 不存在"
fi

# 清理旧版本文件（保留最新的5个版本）
echo "🧹 清理旧版本文件..."
cd build
ls -t game_*.js 2>/dev/null | tail -n +6 | xargs -r rm -f
cd ..

echo ""
echo "✨ 构建完成！"
echo "📁 构建文件位置: build/"
echo "🎮 游戏文件: $output_file ($(wc -l < "$output_file") 行代码)"
echo "🔗 最新版本: $latest_file"
echo "�️  版本标识: $BUILD_HASH"
echo ""
echo "�🌐 运行游戏:"
echo "   cd build && python -m http.server 8000"
echo "   然后打开: http://localhost:8000"
echo ""

# 显示文件大小统计
echo "📊 文件大小统计:"
ls -lh build/*.js 2>/dev/null | awk '{print "   " $9 ": " $5}' || echo "   无JS文件"
echo ""

# 显示版本历史
echo "📚 版本历史（最近5个）:"
ls -lt build/game_*.js 2>/dev/null | head -5 | awk '{print "   " $9 " (" $6 " " $7 " " $8 ")"}' || echo "   无历史版本"
echo ""

echo "🎉 构建成功！游戏已准备就绪。"
echo "💡 提示：每次构建都会生成新的版本号，自动解决浏览器缓存问题。"